package com.common.hbase.service;

import com.common.hbase.constant.PutConstant;
import com.common.hbase.domain.GetDomain;
import com.common.hbase.domain.ScanDomain;
import com.common.hbase.instance.HbaseInstance;
import com.common.hbase.liaison.HbaseInterface;
import com.common.hbase.liaison.ParseInterface;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class HbaseService {

    @Autowired
    private HbaseInstance hbaseInstance;

    /*
    *  查询全部
    *@param tableName   表名
    *@param aClass   返回值类型
    * */
    public <T> List<T> findAll(String tableName,Class aClass){
        return new ParseInterface<T>().parseScan(aClass, hbaseInstance.scanTable(new ScanDomain(tableName)));
    }

    /*
    *  指定列族查询  scan
    *  @param hbaseInterface  继承这个接口自定义规则
    *  @param aClass  返回值类型
    * */
    public <T> List<T> findScan(HbaseInterface hbaseInterface,Class aClass){
        return new ParseInterface<T>().parseScan(aClass,hbaseInstance.scanTable(hbaseInterface));
    }


    /*
    *  根据key值查询
    * @param tableName 表名
    * @param rowKey  键值
    * @param 返回值类型
    * */
    public <T> T findByRowKey(String table,String rowKey,Class<T> aClass){
        return new ParseInterface<T>().parseGet(aClass,hbaseInstance.getTable(new GetDomain(rowKey,table)));

    }

    /*
    *   根据key值查询 指定列族
    * */
    public <T> T findGet(HbaseInterface hbaseInterface,Class aClass){
        return (T) new ParseInterface<T>().parseGet(aClass,hbaseInstance.getTable(hbaseInterface));
    }



}
